import cv2

cap = cv2.VideoCapture(0)  # 开启摄像头

# 循环读取图像
while True:
    ok, img = cap.read()  # 读取摄像头图像
    if ok is False:
        print('无法读取到摄像头！')
        break
    
   
    faceImg = img
    
    gray = cv2.cvtColor(faceImg,cv2.COLOR_BGR2GRAY)

    # 加载人脸识别分类器
    # 官方已有的分类器  https://github.com/opencv/opencv/tree/master/data/haarcascades
    # github的不好下载, 可以从码云上找
    # Python\Python38-32\Lib\site-packages\cv2\data  这个目录下也有
    classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    color = (0,255,0)

    # 识别器进行识别
    faceRects = classifier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32, 32))

    if len(faceRects):
        for faceRect in faceRects:
            x,y,w,h = faceRect
            # 框选出人脸   最后一个参数2是框线宽度
            cv2.rectangle(faceImg,(x, y), (x + h, y + w), color, 2)

    
    
    
    # 转换灰色
    gray = cv2.cvtColor(faceImg,cv2.COLOR_BGR2GRAY)

    # 加载人脸识别分类器
    # 官方已有的分类器  https://github.com/opencv/opencv/tree/master/data/haarcascades
    # github的不好下载, 可以从码云上找
    # Python\Python38-32\Lib\site-packages\cv2\data  这个目录下也有
    classifier = cv2.CascadeClassifier('haarcascade_eye.xml')
    color = (255,0,0)

    # 识别器进行识别
    faceRects = classifier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32, 32))

    if len(faceRects):
        for faceRect in faceRects:
            x,y,w,h = faceRect
            # 框选出人脸   最后一个参数2是框线宽度
            cv2.rectangle(faceImg,(x, y), (x + h, y + w), color, 2)
            
    
    #faceImg= cv2.cvtColor(faceImg,cv2.COLOR_RGB2BGR)
    cv2.imshow("faceImg",faceImg)
    # 展示图像
    
    

    k = cv2.waitKey(10)  # 键盘值
    if k == 27:   # 通过esc键退出摄像
        break

# 关闭摄像头
cap.release()
cv2.destroyAllWindows()

